package com.xuzimian.globaldemo.designpatterns.singleton.serialization;

/**
 * 可串行化的单例：序列化和反序列化可能会破坏单例。要实现可串行化的单例，除了
 * 实现Serializable接口，还需要实现readResolve方法。
 * 从流中读取一个对象并准备将其返回给调用者时，调用了readResolve方法.
 * ObjectInputStream检查对象的类是否定义了readResolve方法。
 * 如果定义了方法，则调用readResolve方法以允许流中的对象指定要返回的对象。
 * 返回的对象应该是与所有用途兼容的类型。
 */
public class SerSingleton implements java.io.Serializable{
	String name;
	
	private SerSingleton() {
		//创建单例的过程可能会比较慢
		System.out.println("Singleton is create");
		name="SerSingleton";
	}

	private static SerSingleton instance = new SerSingleton();
	public static SerSingleton getInstance() {
		return instance;
	}

	public static void createString(){
		System.out.println("createString in Singleton");
	}

	/**
	 * 阻止生成新的实例，总是返回当前对象
	 * @return
	 */
	private Object readResolve(){  
        return instance;  
    }  
}
